home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 15 / CU Amiga Magazine's Super CD-ROM 15 (1997)(EMAP Images)(GB)[!][issue 1997-10].iso / CUCD / Graphics / Ghostscript / source / gdevtifs.h < prev    next >
C/C++ Source or Header  |  1996-05-27  |  9KB  |  207 lines

  1. /* Copyright (C) 1994, 1995, 1996 Aladdin Enterprises.  All rights reserved.
  2.   
  3.   This file is part of Aladdin Ghostscript.
  4.   
  5.   Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author
  6.   or distributor accepts any responsibility for the consequences of using it,
  7.   or for whether it serves any particular purpose or works at all, unless he
  8.   or she says so in writing.  Refer to the Aladdin Ghostscript Free Public
  9.   License (the "License") for full details.
  10.   
  11.   Every copy of Aladdin Ghostscript must include a copy of the License,
  12.   normally in a plain ASCII text file named PUBLIC.  The License grants you
  13.   the right to copy, modify and redistribute Aladdin Ghostscript, but only
  14.   under certain conditions described in the License.  Among other things, the
  15.   License requires that the copyright notice and this notice be preserved on
  16.   all copies.
  17. */
  18.  
  19. /* gdevtifs.h */
  20. /* Definitions for writing TIFF file formats. */
  21.  
  22. #ifndef gdevtifs_INCLUDED
  23. #  define gdevtifs_INCLUDED
  24.  
  25. /* ================ TIFF specification ================ */
  26.  
  27. /* Based on TIFF specification version 6.0 obtained from */
  28. /* sgi.com:graphics/tiff/TIFF6.ps.Z. */
  29.  
  30. /*
  31.  * The sizes of TIFF data types are system-independent.  Therefore,
  32.  * we cannot use short, long, etc., but must use types of known sizes.
  33.  */
  34. #if arch_sizeof_short == 2
  35. typedef short TIFF_short;            /* no plausible alternative */
  36. typedef unsigned short TIFF_ushort;
  37. #endif
  38. #if arch_sizeof_int == 4
  39. typedef int TIFF_long;
  40. typedef unsigned int TIFF_ulong;
  41. #else
  42. # if arch_sizeof_long == 4
  43. typedef long TIFF_long;
  44. typedef unsigned long TIFF_ulong;
  45. # endif
  46. #endif
  47.  
  48. /*
  49.  * Define the TIFF file header.
  50.  */
  51. typedef    struct TIFF_header_s {
  52.     TIFF_ushort magic;        /* magic number (defines byte order) */
  53.     TIFF_ushort version;        /* TIFF version number */
  54.     TIFF_ulong diroff;        /* byte offset to first directory */
  55. } TIFF_header;
  56.  
  57. #define    TIFF_magic_big_endian        0x4d4d        /* 'MM' */
  58. #define    TIFF_magic_little_endian    0x4949        /* 'II' */
  59.  
  60. #define    TIFF_version_value    42
  61.  
  62. /*
  63.  * Define an individual entry in a TIFF directory.  Within a directory,
  64.  * the entries must be sorted by increasing tag value.
  65.  *
  66.  * The value field contains either the offset of the field data in the file,
  67.  * or, if the value fits in 32 bits, the value itself, left-justified.
  68.  * Field data may appear anywhere in the file, so long as each data block is
  69.  * aligned on a 32-bit boundary and is disjoint from all other data blocks.
  70.  */
  71. typedef    struct TIFF_dir_entry_s {
  72.     TIFF_ushort tag;    /* TIFF_tag */
  73.     TIFF_ushort type;    /* TIFF_data_type */
  74.     TIFF_ulong count;    /* number of items (spec calls this 'length') */
  75.     TIFF_ulong value;    /* byte offset to field data, */
  76.                 /* or actual value if <=4 bytes */
  77. } TIFF_dir_entry;
  78.  
  79. /*
  80.  * Define the tag data type values.
  81.  */
  82. typedef    enum {
  83.     TIFF_BYTE    = 1,    /* 8-bit unsigned integer */
  84.     TIFF_ASCII    = 2,    /* 8-bit bytes with last byte null */
  85.     TIFF_SHORT    = 3,    /* 16-bit unsigned integer */
  86.     TIFF_LONG    = 4,    /* 32-bit unsigned integer */
  87.     TIFF_RATIONAL    = 5,    /* 64-bit unsigned fraction */
  88.                 /* (ratio of two 32-bit unsigned integers) */
  89.     TIFF_SBYTE    = 6,    /* 8-bit signed integer */
  90.     TIFF_UNDEFINED    = 7,    /* 8-bit untyped data */
  91.     TIFF_SSHORT    = 8,    /* 16-bit signed integer */
  92.     TIFF_SLONG    = 9,    /* 32-bit signed integer */
  93.     TIFF_SRATIONAL    = 10,    /* 64-bit signed fraction */
  94.                 /* (ratio of two 32-bit signed integers) */
  95.     TIFF_FLOAT    = 11,    /* 32-bit IEEE floating point */
  96.     TIFF_DOUBLE    = 12,    /* 64-bit IEEE floating point */
  97.         /* A flag to indicate the value is indirect. */
  98.         /* This is only used internally; it is not part of the */
  99.         /* TIFF specification (although it should be!). */
  100.     TIFF_INDIRECT = 128
  101. } TIFF_data_type;
  102.  
  103. /*
  104.  * Define the tag values we need.  Note that this is only a very small subset
  105.  * of all the values defined in the TIFF specification; we will add more
  106.  * as the need arises.
  107.  */
  108. typedef enum {
  109.     TIFFTAG_SubFileType =        254,    /* subfile data descriptor */
  110. #define        SubFileType_reduced_image    0x1    /* reduced resolution version */
  111. #define        SubFileType_page        0x2    /* one page of many */
  112. #define        SubFileType_mask        0x4    /* transparency mask */
  113.     TIFFTAG_ImageWidth =        256,    /* image width in pixels */
  114.     TIFFTAG_ImageLength =        257,    /* image height in pixels */
  115.     TIFFTAG_BitsPerSample =        258,    /* bits per channel (sample) */
  116.     TIFFTAG_Compression =        259,    /* data compression technique */
  117. #define        Compression_none        1    /* dump mode */
  118. #define        Compression_CCITT_RLE    2    /* CCITT modified Huffman RLE */
  119. #define        Compression_CCITT_T4    3    /* CCITT T.4 fax encoding */
  120. #define        Compression_CCITT_T6    4    /* CCITT T.6 fax encoding */
  121. #define        Compression_LZW        5    /* Lempel-Ziv  & Welch */
  122. #define        Compression_JPEG        6    /* !JPEG compression */
  123. #define        Compression_NeXT        32766    /* NeXT 2-bit RLE */
  124. #define        Compression_CCITT_RLEW    32771    /* #1 w/ word alignment */
  125. #define        Compression_PackBits    32773    /* Macintosh RLE */
  126. #define        Compression_Thunderscan    32809    /* ThunderScan RLE */
  127.     TIFFTAG_Photometric =        262,    /* photometric interpretation */
  128. #define        Photometric_min_is_white    0    /* min value is white */
  129. #define        Photometric_min_is_black    1    /* min value is black */
  130. #define        Photometric_RGB        2    /* RGB color model */
  131. #define        Photometric_palette        3    /* color map indexed */
  132. #define        Photometric_mask        4    /* $holdout mask */
  133. #define        Photometric_separated    5    /* !color separations */
  134. #define        Photometric_YCbCr        6    /* !CCIR 601 */
  135. #define        Photometric_CIE_Lab        8    /* !1976 CIE L*a*b* */
  136.     TIFFTAG_FillOrder =        266,    /* data order within a byte */
  137. #define        FillOrder_MSB2LSB        1    /* most significant -> least */
  138. #define        FillOrder_LSB2MSB        2    /* least significant -> most */
  139.     TIFFTAG_StripOffsets =        273,    /* offsets to data strips */
  140.     TIFFTAG_Orientation =        274,    /* +image Orientation */
  141. #define        Orientation_top_left    1    /* row 0 top, col 0 lhs */
  142. #define        Orientation_top_right    2    /* row 0 top, col 0 rhs */
  143. #define        Orientation_bot_right    3    /* row 0 bottom, col 0 rhs */
  144. #define        Orientation_bot_left    4    /* row 0 bottom, col 0 lhs */
  145. #define        Orientation_left_top    5    /* row 0 lhs, col 0 top */
  146. #define        Orientation_right_top    6    /* row 0 rhs, col 0 top */
  147. #define        Orientation_right_bot    7    /* row 0 rhs, col 0 bottom */
  148. #define        Orientation_left_bot    8    /* row 0 lhs, col 0 bottom */
  149.     TIFFTAG_SamplesPerPixel =    277,    /* samples per pixel */
  150.     TIFFTAG_RowsPerStrip =        278,    /* rows per strip of data */
  151.     TIFFTAG_StripByteCounts =    279,    /* bytes counts for strips */
  152.     TIFFTAG_XResolution =        282,    /* pixels/resolution in x */
  153.     TIFFTAG_YResolution =        283,    /* pixels/resolution in y */
  154.     TIFFTAG_PlanarConfig =        284,    /* storage organization */
  155. #define        PlanarConfig_contig        1    /* single image plane */
  156. #define        PlanarConfig_separate    2    /* separate planes of data */
  157.     TIFFTAG_T4Options =        292,    /* 32 flag bits */
  158. #define        T4Options_2D_encoding    0x1    /* 2-dimensional coding */
  159. #define        T4Options_uncompressed    0x2    /* data not compressed */
  160. #define        T4Options_fill_bits        0x4    /* fill to byte boundary */
  161.     TIFFTAG_T6Options =        293,    /* 32 flag bits */
  162. #define        T6Options_uncompressed    0x2    /* data not compressed */
  163.     TIFFTAG_ResolutionUnit =    296,    /* units of resolutions */
  164. #define        ResolutionUnit_none        1    /* no meaningful units */
  165. #define        ResolutionUnit_inch        2    /* english */
  166. #define        ResolutionUnit_centimeter    3    /* metric */
  167.     TIFFTAG_PageNumber =        297,    /* page number if multi-page */
  168.     TIFFTAG_Software =        305,    /* software name & release */
  169.     TIFFTAG_DateTime =        306,    /* creation date and time */
  170.     TIFFTAG_CleanFaxData =        327    /* regenerated line info */
  171. #define        CleanFaxData_clean        0    /* no errors detected */
  172. #define        CleanFaxData_regenerated    1    /* receiver regenerated lines */
  173. #define        CleanFaxData_unclean    2    /* uncorrected errors exist */
  174. } TIFF_tag;
  175.  
  176. /* ================ Implementation ================ */
  177.  
  178. /*
  179.  * Define the added driver state for TIFF writing.
  180.  */
  181. typedef struct gdev_tiff_state_s {
  182.     long prev_dir;        /* file offset of previous directory offset */
  183.     long dir_off;        /* file offset of next write */
  184.     int ntags;        /* # of tags in directory */
  185.     int vsize;        /* size of values following tags */
  186.         /* Record offsets of values */
  187.     int offset_StripByteCounts;
  188. } gdev_tiff_state;
  189.  
  190. /*
  191.  * Begin writing a TIFF page.  This procedure supplies a standard set of
  192.  * tags; the client can provide additional tags (pre-sorted) and
  193.  * indirect values.
  194.  */
  195. int gdev_tiff_begin_page(P7(gx_device_printer *pdev, gdev_tiff_state *tifs,
  196.                 FILE *fp,
  197.                 const TIFF_dir_entry *entries, int entry_count,
  198.                 const byte *values, int value_size));
  199.  
  200. /*
  201.  * Finish writing a TIFF page.  All data written between begin and end
  202.  * is considered to be a single strip.
  203.  */
  204. int gdev_tiff_end_page(P2(gdev_tiff_state *tifs, FILE *fp));
  205.  
  206. #endif                /* gdevtifs_INCLUDED */
  207.